MongoDB 常用命令
MongoDB 的控制台是一个 JavaScript Shell
控制台常用命令
进入终端后也有些常用的命令
show dbs -- 显示所有数据的列表
db -- 显示当前数据库对象或集合
use local -- 连接到一个指定的数据库
数据库元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间:
dbname.system.*
在 MongoDB 数据库中命名空间 dbname.system.*
是包含多种系统信息的特殊集合(Collection),如下:
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 列出所有名字空间。 |
dbname.system.indexes | 列出所有索引。 |
dbname.system.profile | 包含数据库概要(profile)信息。 |
dbname.system.users | 列出所有可访问数据库的用户。 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态。 |
控制台常用命令
进入终端后也有些常用的命令
show dbs -- 显示所有数据的列表
db -- 显示当前数据库对象或集合
use local -- 连接到一个指定的数据库
终端的查询命令也是很随心所欲,基本上是
db.集合名.fund()
这种形式去查询的
创建、删除数据库
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
// 如下:创建了一个 tempDB 并查询当前数据库
use tempDB;
db
// 查看全部数据库
show dbs
// 删除数据库
db.dropDatabase()
// 删除集合
db.collection.drop()
创建集合
创建语法:
// 在前面创建了数据库的前提下再创建集合
db.createCollection(name, options)
// name: 要创建的集合名称
// options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下可选参数:
- capped 布尔:如果为 true,则创建固定集合。
- size 数值:为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
- max 数值:指定固定集合中包含文档的最大数量。
注意这里的固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
实例:
> use test
switched to db test
> db.createCollection("temp_coll")
{ "ok" : 1 }
查看当前全部集合
> show collections
my_collection
test
创建带参的集合
> db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
一般无需显示的创建集合,直接插入数据就会自动生成这个集合
> db.mycol2.insert({"name" : "测试集合"})
> show collections
mycol2
...
删除集合
// 语法
db.collection.drop()
// 实例
db.mycol2.drop()
如果只是想快速清空当前的这个 col
集合
db.col.remove({})
注意:
remove 用于将集合中的文档删除,但不删除集合本身,也不删除集合的索引。 drop 不仅删除集合的文档,也会删除集合本身,同时也会删除在集合上创建的索引。
查询文档
// 语法(不写查询条件默认是输出全部)
db.collection.find(query, projection)
// 只返回一个文档
db.collection.findOne(query, projection)
// 输出格式化后的结果 ⭐
db.col.find().pretty()
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
MongoDB AND 条件
db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR 条件
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
AND 和 OR 联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "学习资料"},{"title": "MongoDB 教程"}]}).pretty()
// 对应于:'where likes>50 AND (by = '学习资料' OR title = 'MongoDB 教程')'
条件操作符
$gt -------- greater than >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
实例:获取 "col" 集合中 "likes" 大于100,小于 200 的数据,可以使用以下命令:
db.col.find({likes : {$lt :200, $gt : 100}})
// 类似于SQL语句:
// Select * from col where likes>100 AND likes<200;
模糊查询
查询 title 包含"教"字的文档:
db.col.find({title:/教/})
查询 title 字段以"教"字开头的文档:
db.col.find({title:/^教/})
查询 titl e字段以"教"字结尾的文档:
db.col.find({title:/教$/})
插入文档
文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式(BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称)
MongoDB 使用 insert()
方法向集合中插入文档,语法如下:
// 语法
db.COLLECTION_NAME.insert(document)
insert()
: 若插入的数据主键已经存在,则会抛异常,提示主键重复,不保存当前数据。
db.col.insert(
{
title: '学习 MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
// 查看已插入文档
db.col.find()
// 会自动生成 _id
[
{
"_id": {"$oid": "5fd5e292d0c6063c2fa534a0"},
"description": "MongoDB 是一个 Nosql 数据库",
"likes": 100,
"tags": ["mongodb", "database", "NoSQL"],
"title": "学习 MongoDB"
}
]
除了上面那种直接插入的方法,还有具体细分的方法 insertOne
插入单条数据、insertMany
插入多条文档数据
// 语法
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。
实例:
// 插入单条数据
db.col.insertOne({"a": 3})
// [
// {
// "_id": {"$oid": "5fd5e4f0d0c6063c2fa534a2"},
// "a": 3
// }
// ]
// 插入多条数据
db.col.insertMany([{"b": 3}, {'c': 4}])
// [
// {
// "_id": {"$oid": "5fd5e51bd0c6063c2fa534a3"},
// "b": 3
// },
// {
// "_id": {"$oid": "5fd5e51bd0c6063c2fa534a4"},
// "c": 4
// }
// ]
修改文档
// 语法
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query : update 的查询条件,类似sql update 查询内 where 后面的。
- update : update 的对象和一些更新的操作符(如
$
、$inc
...)等,也可以理解为sql update 查询内 set 后面的 - upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。
- multi : 可选,mongodb 默认是 false 只更新找到的第一条记录,如果这个参数为 true 就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
> db.col.update({'title':'学习 MongoDB'}, {$set: {'title': '这是修改后的标题'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
以上语句只会修改第一条发现的文档,如果要修改多条相同的文档,则需要设置 multi 参数为 true
db.col.update({'title':'学习 MongoDB'}, {$set: {'title': '这是修改后的标题'}},{multi:true})
更多实例:
// 只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
// 全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
// 只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
// 全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
// 全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
// 只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
删除文档
MongoDB remove()
函数是用来移除集合中的数据。
remove()
方法的基本语法格式如下所示:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
例如快速清空当前的这个 col
集合
db.col.remove({})
在执行 remove()
函数前先执行 find()
命令来判断执行的条件是否正确,这是一个比较好的习惯。
Limit 与 Skip 方法
>db.COLLECTION_NAME.find().limit(NUMBER)
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
使用 skip()
方法来跳过指定数量的数据,skip 方法同样接受一个数字参数作为跳过的记录条数。